// noinspection JSUnresolvedReference /** * Field Google Map */ /* global jQuery, document, redux_change, redux, google */ (function ( $ ) { 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.google_maps = redux.field_objects.google_maps || {}; /* LIBRARY INIT */ redux.field_objects.google_maps.init = function ( selector ) { if ( ! selector ) { selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' ); } $( selector ).each( function ( i ) { let delayRender; const el = $( this ); let parent = el; if ( ! el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ':hidden' ) ) { return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } // Check for delay render, which is useful for calling a map // render after JavaScript load. delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) ); // API Key button. redux.field_objects.google_maps.clickHandler( el ); // Init our maps. redux.field_objects.google_maps.initMap( el, i, delayRender ); } ); }; /* INIT MAP FUNCTION */ redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) { let delayed; let scrollWheel; let streetView; let mapType; let address; let defLat; let defLong; let defaultZoom; let mapOptions; let geocoder; let g_autoComplete; let g_LatLng; let g_map; let noLatLng = false; // Pull the map class. const mapClass = el.find( '.redux_framework_google_maps' ); const containerID = mapClass.attr( 'id' ); const autocomplete = containerID + '_autocomplete'; const canvas = containerID + '_map_canvas'; const canvasId = $( '#' + canvas ); const latitude = containerID + '_latitude'; const longitude = containerID + '_longitude'; // Add map index to data attr. // Why, say we want to use delay_render, // and want to init the map later on. // You'd need the index number in the // event of multiple map instances. // This allows one to retrieve it // later. $( mapClass ).attr( 'data-idx', idx ); if ( true === delayRender ) { return; } // Map has been rendered, no need to process again. if ( $( '#' + containerID ).hasClass( 'rendered' ) ) { return; } // If a map is set to delay render and has been initiated // from another scrip, add the 'render' class so rendering // does not occur. // It messes things up. delayed = Boolean( mapClass.data( 'delay-render' ) ); if ( true === delayed ) { mapClass.addClass( 'rendered' ); } // Create the autocomplete object, restricting the search // to geographical location types. g_autoComplete = await google.maps.importLibrary( 'places' ); g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} ); // Data bindings. scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) ); streetView = Boolean( mapClass.data( 'street-view' ) ); mapType = Boolean( mapClass.data( 'map-type' ) ); address = mapClass.data( 'address' ); address = decodeURIComponent( address ); address = address.trim(); // Set default Lat/lng. defLat = canvasId.data( 'default-lat' ); defLong = canvasId.data( 'default-long' ); defaultZoom = canvasId.data( 'default-zoom' ); // Eval whether to set maps based on lat/lng or address. if ( '' !== address ) { if ( '' === defLat || '' === defLong ) { noLatLng = true; } } else { noLatLng = false; } // Can't have empty values, or the map API will complain. // Set default for the middle of the United States. defLat = defLat ? defLat : 39.11676722061108; defLong = defLong ? defLong : -100.47761000000003; if ( noLatLng ) { // If displaying a map based on an address. geocoder = new google.maps.Geocoder(); // Set up Geocode and pass address. geocoder.geocode( {'address': address}, function ( results, status ) { let latitude; let longitude; // Function results. if ( status === google.maps.GeocoderStatus.OK ) { // A good address was passed. g_LatLng = results[0].geometry.location; // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); // Get and set lat/long data. latitude = el.find( '#' + containerID + '_latitude' ); latitude.val( results[0].geometry.location.lat() ); longitude = el.find( '#' + containerID + '_longitude' ); longitude.val( results[0].geometry.location.lng() ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } else { // No data found, alert the user. alert( 'Geocode was not successful for the following reason: ' + status ); } } ); } else { // If displaying map based on an lat/lng. g_LatLng = new google.maps.LatLng( defLat, defLong ); // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, // Start off far unless an item is selected, set by php. streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create the map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } }; redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) { let markerTooltip; let infoWindow; let g_marker; let geoAlert = mapClass.data( 'geo-alert' ); // Get HTML. const input = document.getElementById( autocomplete ); // Set objects into the map. g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input ); // Bind objects to the map. g_autoComplete = new google.maps.places.Autocomplete( input ); g_autoComplete.bindTo( 'bounds', g_map ); // Get the marker tooltip data. markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Create infoWindow. infoWindow = new google.maps.InfoWindow(); // Create marker. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), draggable: true, title: markerTooltip, animation: google.maps.Animation.DROP } ); geoAlert = decodeURIComponent( geoAlert ); // Place change. google.maps.event.addListener( g_autoComplete, 'place_changed', function () { let place; let address; let markerTooltip; infoWindow.close(); // Get place data. place = g_autoComplete.getPlace(); // Display alert if something went wrong. if ( ! place.geometry ) { window.alert( geoAlert ); return; } console.log( place.geometry.viewport ); // If the place has a geometry, then present it on a map. if ( place.geometry.viewport ) { g_map.fitBounds( place.geometry.viewport ); } else { g_map.setCenter( place.geometry.location ); g_map.setZoom( 17 ); // Why 17? Because it looks good. } markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Set the marker icon. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), title: markerTooltip, clickable: true, draggable: true, animation: google.maps.Animation.DROP } ); // Set marker position and display. g_marker.setPosition( place.geometry.location ); g_marker.setVisible( true ); // Form array of address components. address = ''; if ( place.address_components ) { address = [( place.address_components[0] && place.address_components[0].short_name || '' ), ( place.address_components[1] && place.address_components[1].short_name || '' ), ( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' ); } // Set the default marker info window with address data. infoWindow.setContent( '
' + place.name + '
' + address ); infoWindow.open( g_map, g_marker ); // Run Geolocation. redux.field_objects.google_maps.geoLocate( g_autoComplete ); // Fill in address inputs. redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete ); } ); // Marker drag. google.maps.event.addListener( g_marker, 'drag', function ( event ) { document.getElementById( latitude ).value = event.latLng.lat(); document.getElementById( longitude ).value = event.latLng.lng(); } ); // End marker drag. google.maps.event.addListener( g_marker, 'dragend', function () { redux_change( el.find( '.redux_framework_google_maps' ) ); } ); // Zoom Changed. g_map.addListener( 'zoom_changed', function () { el.find( '.google_m_zoom_input' ).val( g_map.getZoom() ); } ); // Marker Info Window. infoWindow = new google.maps.InfoWindow(); google.maps.event.addListener( g_marker, 'click', function () { const marker_info = containerID + '_marker_info'; const infoValue = document.getElementById( marker_info ).value; if ( '' !== infoValue ) { infoWindow.setContent( infoValue ); infoWindow.open( g_map, g_marker ); } } ); }; /* FILL IN ADDRESS FUNCTION */ redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) { // Set variables. const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' ); // What if someone only wants city, or state, ect... // gotta do it this way to check for the address! // Need to check each of the returned components to see what is returned. const componentForm = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' }; // Get the place details from the autocomplete object. const place = g_autoComplete.getPlace(); let component; let i; let addressType; let _d_addressType; let val; let len; document.getElementById( latitude ).value = place.geometry.location.lat(); document.getElementById( longitude ).value = place.geometry.location.lng(); for ( component in componentForm ) { if ( componentForm.hasOwnProperty( component ) ) { // Push in the dynamic form element ID again. component = containerID + '_' + component; // Assign to proper place. document.getElementById( component ).value = ''; document.getElementById( component ).disabled = false; } } // Get each component of the address from the place details // and fill the corresponding field on the form. len = place.address_components.length; for ( i = 0; i < len; i += 1 ) { addressType = place.address_components[i].types[0]; if ( componentForm[addressType] ) { // Push in the dynamic form element ID again. _d_addressType = containerID + '_' + addressType; // Get the original. val = place.address_components[i][componentForm[addressType]]; // Assign to proper place. document.getElementById( _d_addressType ).value = val; } } }; redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) { if ( navigator.geolocation ) { navigator.geolocation.getCurrentPosition( function ( position ) { const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude ); const circle = new google.maps.Circle( { center: geolocation, radius: position.coords.accuracy } ); g_autoComplete.setBounds( circle.getBounds() ); } ); } }; /* API BUTTON CLICK HANDLER */ redux.field_objects.google_maps.clickHandler = function ( el ) { // Find the API Key button and react on click. el.find( '.google_m_api_key_button' ).on( 'click', function () { // Find message wrapper. const wrapper = el.find( '.google_m_api_key_wrapper' ); if ( wrapper.is( ':visible' ) ) { // If the wrapper is visible, close it. wrapper.slideUp( 'fast', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } else { // If the wrapper is visible, open it. wrapper.slideDown( 'medium', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } } ); el.find( '.google_m_autocomplete' ).on( 'keypress', function ( e ) { if ( 13 === e.keyCode ) { e.preventDefault(); } } ); // Auto select autocomplete contents, // since Google doesn't do this inherently. el.find( '.google_m_autocomplete' ).on( 'click', function ( e ) { $( this ).trigger( 'focus' ); $( this ).trigger( 'select' ); e.preventDefault(); } ); }; } )( jQuery ); Ανεβάλте την συνοδευτική εμπειρία του Casinova Casino στο διαδίκτυο – Orchid Group
Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Ανεβάλте την συνοδευτική εμπειρία του Casinova Casino στο διαδίκτυο

Ανεβάλте την συνοδευτική εμπειρία του Casinova Casino στο διαδίκτυο

Τι συναισθήματα προκαλούν οι διαδικτυακές πεταγές του Casinova Casino;

Τι συναισθήματα προκαλούν οι διαδικτυακές πεταγές του Casinova Casino; Οι πεταγές του Casinova Casino στο διαδίκτυο είναι μια εμπειρία μοναδική, προκαλώντας ένα είναι ένα εκλεκτικό σύνολο εντυπώσεων.

Πρώτα και κυρία, η ύbris είναι παντou στο πλάι. Η αντίθεση της τύχης σας με την τύχη των παιχνιδιών είναι ένα αίσθημα ισχυρό και πιο συγκεκριμένα, η ελπίδα να νικήσετε τον τιμημένο jackpot.

Επιπλέον, η ανιέρωση είναι μια αληθινή εμπειρία. Η ανυπόμονη περίπλοκη της ρολιάς σας, η έκπληξη την στιγμή που βλέπετε την σειρά της σας και η ευχαριστημένη αντίληψη όταν κερδίζετε, όλα αυτά δημιουργούν ένα αίσθημα ανιέρωσης πολύ ισχυρό.

Το αίσθημα αντίληψης και η εκστασις είναι άλλες δύο επιγραφές της εμπειρίας Casinova Casino. Η αντρειωμένη αναμnáνση όταν κάνετε ένα νέο παιχνίδι και η αντίληψη ότι βρίσκεστε μέσα σε κάτι πολύ έξυπνο και γλυκό σας κάνει να σας αισθάνеστε προτεινόμενοι.

Όσο αναρχική ή κι αν μπορεί να φαίνεται να είναι η εμπειρία Casinova Casino, η αναπαύση και η ρέθευση είναι σημαντικές. Οι διαδικτυακές πεταγές σας δίνουν τη δυνατότητα να αναπαυθείτε και να διασκεδάσετε μόνος σου, οπότε η εργαζόμενη αναπαύση είναι ένα αίσθημα πολύ συνηθισμένο.

Επιπλέον, η κοινωνική συνεργασία και η σχέση με την κοινότητα των παιχνιδιών σας είναι μια προκαλυπτική εμπειρία. Η ευκαιρία να συναντήσετε νέους ατόμους και να Casinova casino συζήτησετε για την εμπειρία της πεταγής σας δημιουργεί ένα αίσθημα κοινωνικής συνεργασίας και ανταπόκρισης.

Γνωρίστε την ανέκδοτη ιστορία του Casinova Casino σε λεπτά;

Δεν γνωρίζετε την ιστορία του Casinova Casino; Παρακαλούμε, αναγνωρίστε την ανεκδοτική του ιστορία σε λεπτά:

▶ Το Casinova Casino ξεκίνησε σχεδonioύχως το 2000, με ένα μικρό αλλά εντusqueto τηλεφώνητο παιχνίδι.

▶ Τα πρώτα διαδικτυακά παιχνίδια του Casinova Casino προσέγγισαν το 2010, με ένα νέο ιδιωτικό διαδικτυακό καζίνο που περιλαμβάνει περίπου 200 παιχνίδια.

▶ Το 2015, το Casinova Casino έφτασε στον πόλο των διαδικτυακών καζινών με έναν αριθμό παιχνιδιών πάνω από 500, μεγάλη επιλογή πληρωμών και πολύ γρήγορες χρεώσεις.

▶ Το καζίνο παρέχει επιβλεπόμενο παιχνίδια 24/7, είναι έγκυρο σε πολλές γλώσσες και διαθέτει έναν αξιόπιστο κλιμακωτικό διακόπτη ενεργειών.

▶ Το Casinova Casino έχει συνεργαστεί με πολλές επαγγελματικές εταιρείες παιγνιδιών, προσφέροντας ποικιλία και ποιότητα.

▶ Έχει καταφέρει να αναπτύξει ένα αξιόπιστο όνομα στον χώρο των διαδικτυακών καζινών, επιβεβαιώνοντας την αξιοπιστία και την ασφάλεια των πελατών του.

Πώς να επιτύχετε την πρωτότυπη εμπειρία της πετάνης στο Casinova Casino;

Πάτησε το πλήκτρο Play Now και αναπτύξτε τη λιτέρα της τύχης στο Casinova Casino.
Συνδεθήτε ή κτίστε ένα νέο λογαριασμό για να ελέγξετε τις εκκινητικές προσφορές και να δοκιμάσετε την πλétora των παιχνιδιών.
Δοκιμάστε την αισθητική του πρωτογνώστιου Live Casino και τον εντυπωσιακό Jackpot που σας προσφέρει το Casinova Casino.
Αναζητήστε τα προσφορά-φάντασμα, όπως τους δωρούς και τα κόκκινα καρτέλιντα, και να επαναλάβετε την εμπειρία της πετάνης με την ευκαιρία να κερδίζετε κανένα χρήμα.
Μην ξεχνάτε να επισκεφθείτε την εκπαιδευτική σελίδα Help για να δείτε τις απαίτησης και τις ρυθμίσεις για κάθε παιχνίδι.
Το Casinova Casino σας προσφέρει την πρωτότυπη εμπειρία της πετάνης με έναν ασφαλισμένο περíβαλλον και υπηρεσίες υψηλής ποιότητας.
Αναπτύξτε τη λιτέρα της τύχης σήμερα και επιτύχετε την πρωτότυπη εμπειρία της πετάνης στο Casinova Casino!

Τα ιδιαίτερα Χαρακτηριστικά που απλοποιούν την συνοδευτική του Casinova Casino ιστορία;

Η Casinova Casino διαφέρει λargometra από τα άλλα καζίνο όλων των χώρων, έχοντας ένα ποικιλότροπον σύνολο ιδιαίτερών χαρακτηριστικών. Το παραδοσιακό πόρταFE του Casinova Casino σας μεταφέρει σε μια άθλια περίοδο, που σας επιτρέπει να αισθανθείτε την ατμόσφαιρα ενός πραγματικού καζίνο. Τα παιχνίδια με ζαριά είναι ένα άλλο σημαντικό σημείο, επιτρέποντας στους παίκτες να απολαύσουν την εμπειρία του παιχνιδιού με τα ζαριά με την πρόσβαση τους από την οικεία τους πολυμεσικές συσκευές. Η υψηλή ποιότητα της υποστήριξης πελατών είναι επίσης μια σημαντική ιδιότητα, επιτρέποντάς σε οποιοδήποτε χρήστη να λαβει βοήθεια ή να ερευνήσει ζητήματα πολύ γρήγορα. Το πληθώρα παιχνιδιού είναι αρκετά μεγάλο, σaς δίνει την ευκαιρία να δοκιμάσετε πολλά διαφορετικά παιχνίδια και να βρείτε αυτά που προτιμάτε. Το προσεγγίσματος Fair Play είναι μια άλλη σημαντική ιδιότητα, δημιουργώντας ένα περιβάλλον ασφαλείας και αξιόπιστης παιχνιδιακής εμπειρίας. Τελευταία αλλά όχι ολιγώτερο σημαντική, η προσεγγίζουσα υποστήριξη του Casinova Casino σας βοηθά να λύσετε οποιοδήποτε πρόβλημα σχεδόν άμεσα, επιτρέποντάς σας να συνεχίσετε την ενοχλητική σας παιχνιδιακή εμπειρία.

Ένας άνθρωπος με το όνομα Πέτρος, 28 ετών, γράφει:

Ανεβάλτηκα τη συνοδευτική εμπειρία του Casinova Casino στο διαδίκτυο και δεν μπορώ να ειπώ εufficient enough πώς επιπλέον ήταν! Το διαδίκτυο Casinova διαθέτει ένα μεγάλο ποικίλο πιασμάτων, περιλαμβάνοντας παιχνίδια ρολικών, παίκτες και πολλά άλλα!

Ένα γυναίκα με το όνομα Μαρία, 35 ετών, γράφει:

Τα παιχνίδια του Casinova Casino είναι πραγματικά ένα περίληψη! Έχω δοκιμάσει πολλές καιρικές πλατφόρμες και το Casinova είναι τόσο πιο καλύτερο. Το διαδίκτυο είναι γρήγορο, εύκολο να χρησιμοποιηθεί και τα παιχνίδια είναι πολύ διασφαλές. Συνόλως, μεγάλη εμπειρία!

Ένας άνθρωπος με το όνομα Γιώργος, 42 ετών, γράφει:

Ανεβάλτηκα τη συνοδευτική εμπειρία του Casinova Casino και ήταν πολύ ενδιαφέρον. Τα παιχνίδια ήταν περίληψη και το ταμπέλα ήταν γρήγορο και εύκολο να χρησιμοποιηθεί. Επίσης, ήθελα να σας πουν ότι το υποστήριξη του Casinova ήταν πολύ χρήσιμη και άμεση όταν είχα μια ερώτηση.

Ένας άνθρωπος με το όνομα Θανάσης, 32 ετών, γράφει:

Τα παιχνίδια του Casinova είναι πολύ σκληρά. Είμαι ένας παίκτης πολύτιμος και δεν βρήκα τίποτα για να με διασάвиουν. Το διαδίκτυο είναι εύκολο να χρησιμοποιηθεί, αλλά τα παιχνίδια δεν ήταν τόσο ενδιαφέροντα για μένα. Το υποστήριξη ήταν αρκετά χρήσιμη.

Θέλετε να γνωρίσετε περισσότερα για την εκστρατηγημένη ταξιδεύστρια του Casinova Casino;

Ενδέχεται να ποσοστάτε ότι θα σας ζητήσει να αναζητήσετε πώς να ξεκινήσετε;

Μπορείτε να αναπτύξετε την εμπειρία της συνοδευτικής ταξιδεύσεως του Casinova Casino απλώς εγγραφόμενοι;

Η εγγραφή είναι άρειο απλή;

Ενώ συνδεθείτε, έχετε πρόσβαση σε εκ dic Center παιχνίδια και υπηρεσίες του Casinova Casino.

Design and Develop by Ovatheme